package br.com.conciliador.cadastro.negocio;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;

import br.com.conciliador.cadastro.vo.EstLojaVo;
import br.com.conciliador.consulta.vo.ExtratoVo;
import br.com.conciliador.util.hibernate.business.R2HbNgc;
import br.com.r2.util.hibernate.business.RestritorHb;
import br.com.r2.util.tipodado.Moeda;

public class EstLojaNgc extends R2HbNgc<EstLojaVo>
{

   private Map filtroPropriedade = new HashMap();
   private Map restritores = new HashMap();
   
   public static final int JOIN_EST_EMPRESA = 1;

   public static final int JOIN_EST_EMPRESA_USUARIO = 2;
   
   private static EstLojaNgc instancia = null;
   
   private EstLojaNgc()
   {
      init(restritores, filtroPropriedade, EstLojaVo.class);
      addFiltro("estEmpresa.codigo", RestritorHb.RESTRITOR_EQ, "estEmpresaVo.codigo");
      addFiltro("listaUsuarios.codigo", RestritorHb.RESTRITOR_EQ, "filtroVo.codigoUsuario");
   }
   
   public static EstLojaNgc getInstancia()
   {
       if (instancia == null)
       {
           instancia = new EstLojaNgc();
       }
       return instancia;
   }

   @Override
   public List<EstLojaVo> pesquisar(Session session, EstLojaVo filter, int join) throws Exception
   {
	   
	 Criteria criteria = this.montaCriteria(session, join);

	 this.setarOrdenacao(criteria, filter, join);

	 this.restringir(criteria, filter);
		
	 this.setNumeroMaximoRegistros(session, criteria, filter, join);

	 List<EstLojaVo> listaLancamentos = criteria.list();
		
	 return listaLancamentos;
   }
   
   @Override
   protected Map filtroPropriedade()
   {
       return filtroPropriedade;
   }

   @Override
   protected Criteria montaCriteria(Session sessao, int join)
   {
       Criteria criteria = sessao.createCriteria(EstLojaVo.class);
       if ((join & JOIN_EST_EMPRESA) != 0)
       {
          criteria.createCriteria("estEmpresaVo", "estEmpresa", Criteria.INNER_JOIN);

          if ((join & JOIN_EST_EMPRESA_USUARIO) != 0)
          {
             criteria.createCriteria("estEmpresa.listaUsuarios", "listaUsuarios", Criteria.INNER_JOIN);
          }
       }
       return criteria;
   }

   @Override
   protected void setarOrdenacao(Criteria criteria, EstLojaVo filter, int join)
   {
      criteria.addOrder(Order.asc("descricao"));
   }
   
   
   @Override
   protected Map restritores()
   {
       return restritores;
   }

}
